梦入琼楼寒有月,行过石树冻无烟

PHP I/O

I/O即输出流和输入流,通常I/O流在开发语言之中非常常见,如Java、Python都支持I/O流。所谓I/O流无非就是输出文件、写入文件,通常I/O流包含了打开、读取、关闭、删除等常用操作。

目录

创建目录与获取目录及删除目录

创建目录
mkdir()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
if (mkdir(demo)) {
echo "创建成功";
} else {
echo "创建失败";
}
?>
</body>
</html>
删除目录
rmdir()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
mkdir("test");
if (rmdir("test")) {
echo "删除成功";
} else {
echo "删除失败";
}
?>
</body>
</html>
工作目录的获取与修改
getcwd()

getcwd()函数可以获取当前程序所处的目录,使用此函数可以获取到当前的工作目录。

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
echo getcwd();
?>
</body>
</html>
chdir()

chidir()函数可以直接设置当前的工作目录,也就是说使用此函数可以指定工作目录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
mkdir("/test");
chdir('/test');
echo getcwd();
?>
</body>
</html>

打开与关闭目录句柄

当文件和目录的访问都是通过句柄来实现的,而句柄就是打开一个文件所产生的变量$n即称之为句柄,操作完成后为了避免系统资源的小号应关闭句柄。如打开成功则返回TRUE,否则返回FALSE。而在PHP I/O中,打开句柄通常使用**opendir()来表示,而关闭句柄使用closedir()**来实现。

打开句柄
opendir()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$mkdir = "/Users";
$mkdir_open = opendir($mkdir);
if ($mkdir_open) {
echo "目录句柄打开成功";
} else {
echo "目录句柄打开失败";
}
?>
</body>
</html>
关闭句柄
closedir()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$mkdir = "/Users";
$mkdir_open = opendir($mkdir);
if ($mkdir_open) {
echo "目录句柄打开成功";
} else {
echo "目录句柄打开失败";
}
closedir($mkdir_open);
?>
</body>
</html>

读取目录内容

PHP主要为开发者提供了**readdir()**函数用于读取目录内容,该参数是一个已经打开的目录句柄。在每次调用时返回目录下一个文件的文件名,列出来所有的文件名后,函数将返回FALSE,所以readdir()函数也可用于进行目录遍历。

读取目录内容
readdir()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$dir = "/test";
$dir_open = opendir($dir); // 打开目录句柄
if ($dir_open) {
// 通过readdir()函数返回值是否为FALSE,直到判断至最后一个文件
while (false !== ($file = readdir($dir_open))) {
echo $file,"<br>";
}
closedir($dir_open); // 关闭目录句柄
} else {
echo "打开目录失败";
}
?>
</body>
</html>
获取指定的目录和文件
scandir()

scandir()函数主要用于列出指定路径中的目录和文件,如果函数运行成功则返回该路径下的所有目录和文件名的数组,失败则返回FALSE。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$dir = "/";
$one = scandir($dir);
if ($one == FALSE) {
echo "读取失败";
} else {
print_r($one);
echo "<br>";
}
?>
</body>
</html>

文件

文件和目录之间的操作有一定的类似,一般操作文件方法主要分为打开、读取、写入、关闭等,与目录一样,如果要写入文件,则需要打开文件,之后为了避免占用太多资源则会关闭文件,在PHP文件流之中,主要可以使用**fopen()、fclose()**函数分别进行打开文件和关闭流操作

文件打开与关闭

文件访问权限
ID DA FA
r 只读方式打开文件[^从头读写] r
r+ 读写方式打开文件[^从头读写]
w 写入方式打开文件[^从头读写,如果文件存在则删除,不存在则创建] w
w+ 读写方式打开文件[^从头读写,如果文件存在则删除,不存在则创建]
a 写入方式打开文件[^从末尾读写,如果文件存在则删除,不存在则创建] a
a+ 读写方式打开文件[^从末尾读写,如果文件存在则删除,不存在则创建]
x 创建并以写入方式打开文件[^从头读写,如果文件存在则删除,不存在则创建] x
x+ 创建并以读写方式打开文件[^从头读写,如果文件存在则删除,不存在则创建]
b 二进制模式,主要用于连接在其他模式后面[^Windows 区分、Linux/UNIX不区分。如果文件系统能够区分二进制文件和文本文件,则需要使用到此选项]
打开文件
fopen()

在PHP中主要使用fopen()函数打开文件,而fopen()函数可支持打开本地文件和以URL形式读取文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$one = fopen("l.php", "r+");
if ($one) {
echo "打开成功";
} else {
echo "打开失败";
}
?>
</body>
</html>
URL fopen()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$URL_open = fopen("http://clockshan.cn", "r");
if ($URL_open) {
echo "打开成功";
} else {
echo "打开失败";
}
?>
</body>
</html>
关闭文件
fclose()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$open = fopen("l.php", "w");
if (fclose($open)) {
echo "关闭成功";
} else {
echo "关闭失败";
}

?>
</body>
</html>

文件写创建与操作

创建文件
fopen()

在PHP中没有指定的创建文件函数,一般使用fopen()函数加文件模式(**”w”、”w+、“a”、”a+“**)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$one = fopen("deme.txt", "w");
if ($one) {
echo "创建成功";
} else {
echo "创建失败";
}
?>
</body>
</html>
文件写入
fwrite()

fwrite()函数可以向文件写入内容[^在文件已经打开的前提下。文件关闭后则不进行写入],由于UTF-8中文字符一个占两个字节,所以显示写入字节数为15

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$dir = fopen("demo.txt", "w+");
$write = fwrite($dir, "你好世界!");
if ($write) {
echo "写入成功";
echo "写入字节数为:",$write;
fclose($dir);
} else {
echo "文件写入失败";
}
?>
</body>
</html>
文件读取
fread()

fread()函数可以用于读取文件中的内容,在PHP中,fread()函数可以指定最大字节数,默认最大取值为8192

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$data = fopen("deme.txt", "r");
$one = ""; // 初始化为空
while (!feof($data)) {
$dataone = fread($data, 8192);
$one = $dataone;
}
echo $one;
fclose($data);
?>
</body>
</html>
file()

file()函数可以用于将整个文件读取到数组之中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$wire = file("deme.txt");
foreach ($wire as $key) {
echo $key;
}
?>
</body>
</html>
readfile()

readfile()函数主要用于输出文件内容到浏览器之中,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$file = "deme.txt";
$data = readfile($file);
echo "<br>";
echo "|- 当前字节数为",$data;
?>
</body>
</html>
fpassthru()

fpassthru()函数可以将指定的文件指针从当前未知读取到EOF(文档结尾),并把结果输出到缓冲区。使用fpassthru()函数需要先打开文件流、并将参数传递给fpassthru()函数,并到标准输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$name = "deme.txt";
$data = fopen($name, "r");
$num = fpassthru($data);
echo "<br>";
echo "读取字节数为:",$num;
fclose($data);
?>
</body>
</html>
file_get_contents()

file_get_contents()函数可以将整个或部分文件内容读取到一个字符串值中,整个执行过程共调用:fopen = 开启 、fread = 读取 、fclose = 关闭:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$filename = file_get_contents("deme.txt");
echo $filename;
?>
</body>
</html>
读取EOF数据

EFO是(“资料源无更多资料获取,End Of File”),在操作系统之中主要表示当前源无更多资料获取所以在此表达含义为”最后一行数据:“

fgets()

fgets()函数的作用是可以读出一行文本逐一进行输出,而不像上述函数一样整合为一行进行输出[^默认的长度为1024个字节],如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$file = fopen("deme.txt", "r");
if ($file) {
while (!feof($file)) {
$bufer = fgets($file);
echo $bufer,"<br>";
}
fclose($file);
}
?>
</body>
</html>
fgetss()

fgetss()函数的主要作用与fgets()作用基本相同,也是从文件指针处读取一行数据,fgetss()会尝试格式化HTML、Javascript、php等代码输出[^图1为fgetss()函数输出,图二为fgets函数输出。];

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$file = fopen("deme.txt", "r");
if ($file) {
while (!feof($file)) {
$bufer = fgetss($file);
echo $bufer,"<br>";
}
fclose($file);
}
?>
</body>
</html>
删除文件

在php之中,可使用unlink()函数进行删除不需要的文件,如果删除成功则返回TRUE、否则删除失败则返回FALSE;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$file = "D:/Program Files (x86)/phpStudy/WWW/text/1593173883_1490.gif";
// 删除文件
unlink($file);

// 检测文件是否存在
if (file_exists($file)) {
echo "文件存在";
} else {
echo "文件不存在";
}
?>
</body>
</html>
复制文件
copy()

PHP开发语言主要使用copy()来进行文件的复制:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$file = "D:/Program Files (x86)/phpStudy/WWW/text/1593173883_1490.gif";
$filedst = "D:/Program Files (x86)/phpStudy/WWW/text/one.gif";
if (copy($file, $filedst)) {
echo "文件复制成功!";
}
?>
</body>
</html>
移动和重命名文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$file = "D:/Program Files (x86)/phpStudy/WWW/text/1593173883_1490.gif";
$filedst = "D:/Program Files (x86)/phpStudy/WWW/text/two.gif";
if (rename($file, $filedst)) {
echo "重命名成功";
} else {
echo "重命名失败";
}
?>
</body>
</html>
第一个字符
fgetc()

fgetc()函数主要用于从文件开头到文件结尾处进行输出,所以与上述fgetss()、fgets()函数输出差不多:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$data = fopen("deme.txt", "r");
while (!feof($data)) {
$char = fgetc($data);
echo ($char == "\n"?'<br>':$char);
}
?>
</body>
</html>
ID DA FA
mdkir() 创建目录 目录
rmdir() 删除目录
getcwd() 获取当前所在目录
chdir() 是指当前所在的工作目录[^即指定目录]
opendir() 打开句柄
closedir() 关闭句柄
raddir() 读取目录内容
scandir() 获取指定的目录和文件
fopen() 打开文件[^fopen(URL)支持读取URL形式文件,fopen()可以搭配文件模式进行创建文件] 文件打开于关闭[^含创建]
fclose() 关闭文件
fwrite() 文件写入 文件读取
fread() 文件读取
file() 将整个文件读取到数组
readfile() 输出文件到浏览器中
fpassthru() 从指定文件指针中从开头读取到EOF
file_get_contents() 可以将整个或部分文件内容读取到一个字符串值中[^fopen = 开启 、fread = 读取 、fclose = 关闭]
fgets() 读出一行文本逐一进行输出,而不像上述函数一样整合为一行进行输出[^默认的长度为1024个字节] 读取EOF数据
fgetss() fgetss()函数的主要作用与fgets()作用基本相同,也是从文件指针处读取一行数据,fgetss()会尝试格式化HTML、Javascript、php等代码输出[^图1为fgetss()函数输出,图二为fgets函数输出。];
fgetc() 从文件的开头到结尾处进行输出[^所以与上述fgetss()、fgets()函数输出差不多]
unlink() 删除文件 文件删除
copy() 复制文件 文件复制
rename() 文件重命名 重命名文件
⬅️ Go back